GtkCellArea *area;
GtkTreeModel *model;
GtkTreeIter *iter;
+ gboolean is_expander;
+ gboolean is_expanded;
} AttributeData;
struct _GtkCellAreaPrivate
CellAttribute *attribute;
GSList *list;
GValue value = { 0, };
+ gboolean is_expander;
+ gboolean is_expanded;
+
+ g_object_freeze_notify (G_OBJECT (renderer));
+
+ /* Whether a row expands or is presently expanded can only be
+ * provided by the view (as these states can vary across views
+ * accessing the same model).
+ */
+ g_object_get (renderer, "is-expander", &is_expander, NULL);
+ if (is_expander != data->is_expander)
+ g_object_set (renderer, "is-expander", data->is_expander, NULL);
+
+ g_object_get (renderer, "is-expanded", &is_expanded, NULL);
+ if (is_expanded != data->is_expanded)
+ g_object_set (renderer, "is-expanded", data->is_expanded, NULL);
/* Apply the attributes directly to the renderer */
for (list = info->attributes; list; list = list->next)
if (info->func)
info->func (GTK_CELL_LAYOUT (data->area), renderer,
data->model, data->iter, info->data);
+
+ g_object_thaw_notify (G_OBJECT (renderer));
}
void
gtk_cell_area_apply_attributes (GtkCellArea *area,
GtkTreeModel *tree_model,
- GtkTreeIter *iter)
+ GtkTreeIter *iter,
+ gboolean is_expander,
+ gboolean is_expanded)
{
GtkCellAreaPrivate *priv;
AttributeData data;
priv = area->priv;
+ /* Feed in data needed to apply to every renderer */
+ data.area = area;
+ data.model = tree_model;
+ data.iter = iter;
+ data.is_expander = is_expander;
+ data.is_expanded = is_expanded;
+
/* Go over any cells that have attributes or custom GtkCellLayoutDataFuncs and
* apply the data from the treemodel */
g_hash_table_foreach (priv->cell_info, (GHFunc)apply_cell_attributes, &data);